<?php

namespace App\Http\Controllers\SystemManagement;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\SystemManagement\Customer;
use App\Models\SystemManagement\Organization;
use Illuminate\Database\QueryException;
use Validator;
use Illuminate\Support\Facades\DB;

/**
 * @group 系统管理->超级管理员管理->注册公司账户管理
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class CustomerController extends Controller
{
    /**
     * 公司账户管理查看列表
     *
     * @bodyParam name string 公司名称
     *
     * @queryParam name string 公司名称
     * @queryParam start_time datetime 注册时间
     * @queryParam end_time datetime 到期时间
     * @queryParam interval integer 续费提醒
     * @queryParam principal string 组织负责人
     * @queryParam phone string 负责人电话
     * @queryParam size string 公司规模
     * @queryParam type string 产品类型
     * @queryParam status char 启用状态 1:正常 2:禁止
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $customer = new Customer;
        $data = $customer->getList($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 新增公司账户信息
     *
     * @bodyParam name string required 公司名称
     * @bodyParam start_time datetime required 注册时间
     * @bodyParam end_time datetime required 到期时间
     * @bodyParam interval integer required 续费提醒
     * @bodyParam principal string required 组织负责人
     * @bodyParam phone string required 负责人电话
     * @bodyParam size string required 公司规模
     * @bodyParam type string required 产品类型
     * @bodyParam status int required 启用状态 1:正常 2:禁止
     *
     * @queryParam name string 公司名称
     * @queryParam start_time datetime 注册时间
     * @queryParam end_time datetime 到期时间
     * @queryParam interval integer 续费提醒
     * @queryParam principal string 组织负责人
     * @queryParam phone string 负责人电话
     * @queryParam size string 公司规模
     * @queryParam type string 产品类型
     * @queryParam status int 启用状态 1:正常 2:禁止
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }

        DB::beginTransaction();
        try {
            $data = $request->all();
            $transferPlant = Customer::create($data);
            $oganizationData['name'] = $data['name'];
            Organization::addData($oganizationData);
            DB::commit();
            return response()->json(encodeMsg($transferPlant,201));
        } catch (QueryException $e) {
            DB::rollBack();
            dd($e);
            return response()->json(encodeMsg(['message' => '公司账户信息添加失败!'],400));
        }
    }

    /**
     * 查看公司账户信息
     *
     * @bodyParam id int 账户id
     *
     * @queryParam name string 公司名称
     * @queryParam start_time datetime 注册时间
     * @queryParam end_time datetime 到期时间
     * @queryParam interval integer 续费提醒
     * @queryParam principal string 组织负责人
     * @queryParam phone string 负责人电话
     * @queryParam size string 公司规模
     * @queryParam type string 产品类型
     * @queryParam status char 启用状态 1:正常 2:禁止
     *
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $data = Customer::find($id);
        if($data == []) {
            return response()->json(encodeMsg(["message" => "没有该公司账户信息!"], 404));
        } else {
            return response()->json(encodeMsg($data,200));
        }
    }

    /**
     * 修改公司账户信息
     *
     * @bodyParam id int 账户id
     * @bodyParam name string 公司名称
     * @bodyParam start_time datetime 注册时间
     * @bodyParam end_time datetime 到期时间
     * @bodyParam interval integer 续费提醒
     * @bodyParam principal string 组织负责人
     * @bodyParam phone string 负责人电话
     * @bodyParam size string 公司规模
     * @bodyParam type string 产品类型
     * @bodyParam status char 启用状态 1:正常 2:禁止
     *
     * @queryParam name string 公司名称
     * @queryParam start_time datetime 注册时间
     * @queryParam end_time datetime 到期时间
     * @queryParam interval integer 续费提醒
     * @queryParam principal string 组织负责人
     * @queryParam phone string 负责人电话
     * @queryParam size string 公司规模
     * @queryParam type string 产品类型
     * @queryParam status char 启用状态 1:正常 2:禁止
     *
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $customer = Customer::find($id);
        if($customer == []) {
            return response()->json(encodeMsg(["message" => "没有该公司账户信息!"], 404));
        }
        try {
            $data = $request->all();
            $customer->update($data);
            return response()->json(encodeMsg($customer,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '公司账户信息修改失败!'],400));
        }
    }

    /**
     * 删除公司账户信息
     *
     *
     * @bodyParam id int required 账户ID
     * @response 204 {
     *   "message": "公司账户信息删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该公司账户信息"
     * }
     *
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $customer = Customer::find($id);
        if($customer == []) {
            return response()->json(encodeMsg(["message" => "没有该公司账户信息!"], 404));
        }
        if($customer->delete()) {
            return response()->json(encodeMsg(["message" => "公司账户信息删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "公司账户信息删除失败"], 400));
        }
    }

    /**
     * 批量删除公司账户信息
     *
     * @bodyParam ids int required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "公司账户信息删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        Customer::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "公司账户信息删除成功!"], 204));
    }
}
